﻿@{
    //  レイアウト ページとページ タイトルを設定します
    Layout = "~/_SiteLayout.cshtml";
    Page.Title = "パスワードを忘れた場合";

    bool passwordSent = false;
    bool isValid = true;
    var errorMessage = "";
    var emailError = "";
    var disabledAttribute = "";
    var resetToken = "";
    var email = Request.Form["email"] ?? Request.QueryString["email"];

    if (IsPost) {
        // validate email
        if (email.IsEmpty() || !email.Contains("@")) {
            emailError = "有効な電子メールを入力してください";
            isValid = false;
        }
        if (isValid) {
            if (WebSecurity.GetUserId(email) > -1 && WebSecurity.IsConfirmed(email)) {
                resetToken = WebSecurity.GeneratePasswordResetToken(email); //必要に応じてトークンの有効期限を指定します
            } else {
                passwordSent = true; // ユーザーが存在しないことを開示しません。
                isValid = false;
            }
        }
        if (isValid) {
            var hostUrl = Request.Url.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped);
            var resetUrl = hostUrl + VirtualPathUtility.ToAbsolute("~/Account/PasswordReset?resetToken=" + HttpUtility.UrlEncode(resetToken));
            WebMail.Send(
                to: email,	
                subject: "パスワードをリセットしてください。", 
                body: "パスワードをリセットするには、このパスワード リセット トークンを使用します。 トークン: " + resetToken + @"。 <a href=""" + resetUrl + @""">" + resetUrl + "</a> にアクセスして、パスワードをリセットしてください。"
            );
            passwordSent = true;
            disabledAttribute = @"disabled=""disabled""";
        }
    }
}

<form method="post" action="">
    <fieldset>
        <legend>パスワードのリセットに関する説明のフォーム</legend>
        @if (!WebMail.SmtpServer.IsEmpty()) {
            <p>
                ご使用のアカウントに関連付けられている電子メール アドレス宛てに、パスワードのリセットに関する説明を送信します。 
            </p>
            if (passwordSent) {
                <p class="message success">
                    指定された電子メール アドレス宛てに、パスワードのリセットに関する説明を送信しました。
                </p>
            }
            if (!errorMessage.IsEmpty()) {
                <p class="message error">
                    @errorMessage
                </p>
            }
            <ol>
                <li class="email">
                    <label for="email">電子メール アドレス</label>
                    <input type="text" id="email" name="email" title="電子メール アドレス" value="@email" @disabledAttribute @if(!emailError.IsEmpty()){<text>class="error-field"</text>} />
                    @if (!emailError.IsEmpty()) {
                        <label class="validation-error">@emailError</label>
                    }
                </li>
            </ol>
            <p class="form-actions">
                <input type="submit" value="Send Instructions" @disabledAttribute/>
            </p>
        } else {
            <p class="message info">
                SMTP サーバーが適切に構成されていないため、この Web サイトでは 
                パスワードの回復が無効です。 パスワードをリセットするには、このサイトの 
                所有者に連絡してください。
            </p>
        }
    </fieldset>
</form>

